/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package compilador.analisadorSintatico.operacoes;

import compilador.analisadorLexico.Token;
import compilador.analisadorLexico.TokenClass;
import compilador.analisadorSintatico.Producao;
import compilador.analisadorSintatico.TokenReader;
import compilador.analisadorSintatico.simboloGramatical.NaoTerminal;
import compilador.analisadorSintatico.simboloGramatical.SimboloGramatical;
import compilador.analisadorSintatico.simboloGramatical.Terminal;

/**
 *
 * @author Matheus CAS
 * <op_rel> ::= '==' | '!=' | '>' | '>=' | '<' | '<='
 */
public class OP_REL extends Producao{

    @Override
    public SimboloGramatical derivar() throws Exception {
        //chama o token reader para correr os tokens
        TokenReader tokenReader = TokenReader.getInstance();

        Token token = null;

        //instancia o não terminal principal da produção em curso
        NaoTerminal OP_REL = new NaoTerminal(this.getClass().getSimpleName());


        token = tokenReader.seeCurrent();

        if (token.getTokenClass().equals(TokenClass.OPERADOR) && (token.getAtributo().equals("==") ||
                token.getAtributo().equals("!=") ||
                token.getAtributo().equals(">") ||
                token.getAtributo().equals(">=") ||
                token.getAtributo().equals("<") ||
                token.getAtributo().equals("<="))) {


            tokenReader.consome();//avança index
            OP_REL.add(new Terminal(token)); //adiciona ' ' à árvore
        } else {
            erro(this.getClass().getSimpleName() + "mal formado");
            return this.simbolo;
        }
        
        simbolo = OP_REL;
        
        return simbolo;
    }

    @Override
    public void setSimbolo() {
        super.simbolo = new NaoTerminal("OP_REL");
    }

}
